package xin.zhiyin.控制.文件上传;

import com.aliyuncs.exceptions.ClientException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import xin.zhiyin.实体.书章节内容图片Entity;
import xin.zhiyin.工具.ResponseBo;
import xin.zhiyin.工具.文件工具;
import xin.zhiyin.工具.阿里云OSS.阿里云OSSUtil;
import xin.zhiyin.服务.书.书章节内容图片Service;
import xin.zhiyin.服务.系统.阿里云OSS配置信息Service;

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.LinkedHashMap;
import java.util.Random;


@Slf4j
@Controller
@RequestMapping(path = "/upload")//页面的url地址
public class 文件上传Controller{
    @Autowired
    private 阿里云OSS配置信息Service 阿里云Service;
    @Autowired
    书章节内容图片Service 章节内容图片Service;

    @RequestMapping("/images")
    @ResponseBody
    public ResponseBo 上传图片(@RequestParam("upload") MultipartFile file, Long chapterContentId, HttpServletRequest request, HttpServletResponse response) throws ClientException {
        String PicUrl = "";
        阿里云OSSUtil ali = new 阿里云OSSUtil(阿里云Service.根据id获取阿里云OSS(1));
        LinkedHashMap<String, Object> map = new LinkedHashMap<>();
        if(file==null || file.isEmpty())
        {
            map.put("uploaded",false);
            map.put("code",1);
            map.put("url","");
            map.put("msg","failed");
            map.put("message","文件上传失败");
        }else {
            if(false)
            {
                //阿里云OSS
                PicUrl = ali.上传文件(file);
            }else if(false)
            {
                //七牛云OSS
            }else if(false)
            {
                //阿华为云OSS
            }else{
                // 获取请求的协议（http或https）
                String 获取的请求协议 = request.getScheme();
                // 获取服务器名称
                String 获取的服务器名称 = request.getServerName();
                // 获取服务器端口
                int 获取的服务器端口 = request.getServerPort();

                // 获取原始文件名
                String fileName = file.getOriginalFilename();
                log.info("上传的文件名为：" + fileName);
                try {
                    // 将文件保存到指定位置
                    byte[] bytes = file.getBytes();
                    log.info("文件大小为：" + bytes.length);

                    ClassLoader classLoader = getClass().getClassLoader();
                    String 根路径 = classLoader.getResource("").getPath();
                    String 根路径static = 根路径 + "/static";
                    String 文件分类目录 = "other";
                    String contentType = file.getContentType();
                    log.info("文件类型为：" + contentType);
                    if (contentType.equals("image/jpeg") ||
                        contentType.equals("image/png") ||
                        contentType.equals("image/gif") ||
                        contentType.equals("image/bmp") ||
                        contentType.equals("image/webp") ){
                        文件分类目录 = "images/";
                    }else if(contentType.equals("image/svg+xml")){
                        文件分类目录 = "svg/";
                    }else if(contentType.equals("image/x-icon")){
                        文件分类目录 = "icons/";
                    }else if(contentType.equals("application/pdf") ||
                            contentType.equals("application/vnd.openxmlformats-officedocument.wordprocessingml.document") ||
                            contentType.equals("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") ||
                            contentType.equals("application/vnd.openxmlformats-officedocument.presentationml.presentation")){
                        文件分类目录 = "files/";
                    }else if(contentType.equals("application/msword") ||
                            contentType.equals("application/vnd.ms-excel") ||
                            contentType.equals("application/vnd.ms-powerpoint")){
                        文件分类目录 = "docs/";
                    }else if(contentType.equals("audio/mpeg") || contentType.equals("audio/mp3")){
                        文件分类目录 = "audios/";
                    }else if(contentType.equals("video/mp4")){
                        文件分类目录 = "videos/";
                    }else if(contentType.equals("application/zip")){
                        文件分类目录 = "zip";
                    }else if(contentType.equals("text/html") || contentType.equals("text/plain")){
                        文件分类目录 = "text/";
                    }else{
                        文件分类目录 = "other";
                    }

                    String 文件上传路径 = 根路径static + "/upload/" + 文件分类目录;

                    String s = 文件工具.生成年月日时分秒随机文件名称(fileName);
                    String 绝对路径 = 文件工具.upload(file,文件上传路径,s);
                    int index = 绝对路径.indexOf(根路径static);
                    String 文件相对路径 = 绝对路径.substring(index + 根路径static.length());
//                    PicUrl = 获取的请求协议 + ":" + "//" + 获取的服务器名称 + ":" + 获取的服务器端口 + 文件相对路径;
                    PicUrl = 文件相对路径;
                    log.info("图片上传成功后网址：" + PicUrl);
//                    return "上传成功";
                } catch (Exception e) {
                    e.printStackTrace();
//                    return "上传失败";
                }




            }
            map.put("uploaded",true);
            map.put("code",0);
            map.put("url",PicUrl);
            map.put("msg","ok");
            map.put("message","文件上传成功");

            书章节内容图片Entity 内容图片 = new 书章节内容图片Entity();
            内容图片.setUrl(PicUrl);
            内容图片.setChapterContentId(chapterContentId);
            章节内容图片Service.保存(内容图片);
        }
        return ResponseBo.ok(map);
    }


}
